import java.util.ArrayList;
import java.util.HashSet;
import java.util.Hashtable;


public class ErrorHandler extends Hashtable<Integer, String> {
	private final String newline = System.getProperty("line.separator");
	private ArrayList<Integer> usedErrors = new ArrayList<Integer>();
	private int errorcount = 0;
	
	public ErrorHandler(){
		this.put(000,"**FATAL** START LOCATION OUT OF BOUNDS, MUST BE IN RANGE OF 0-4095: ASSEMBLY WILL BE STOPPED");
		this.put(001,"**FATAL** FIRST LINE OF PROGRAM MUST USE STT DIRECTIVE: ASSEMBLY WILL BE STOPPED");
		this.put(002,"**FATAL** INVALID STT OPERAND, NONE FOUND: ASSEMBLY WILL BE STOPPED");
		this.put(003,"**FATAL** THIS CALL TO STT USES AN INVALID MEMORY PAGE NUMBER: ASSEMBLY WILL BE STOPPED");
		this.put(004,"**FATAL** THE START OPERAND FOR THE STT DIRECTIVE MUST BE NUMERICAL VALUES ONLY: ASSEMBLY WILL BE STOPPED");
		this.put(005,"**FATAL** LOCATION COUNTER VALUE IS NOW NEGATIVE: ASSEMBLY WILL BE STOPPED");
		this.put(006,"**FATAL** LOCATION COUNTER VALUE IS OUT OF MEMORY RANGE: ASSEMBLY WILL BE STOPPED");
		this.put(007,"**FATAL** START LOCATION REQUIRES A MEMORY PAGE NUMBER AND START LOCATION: ASSEMBLY STOPPED");
		this.put(010,"**SERIOUS** THIS CALL TO A DIRECTIVE HAS NO REQUIRED OPERANDS IN THE OPERAND FIELD: LINE WILL BE REPLACED WITH NOP");
		this.put(011,"**FATAL** PROGRAM MUST HAVE A VALID END DIRECTIVE: ASSEMBLY STOPPED");
		this.put(100,"**SERIOUS** OPERATION IS NOT A VALID INSTRUCTION OR DIRECTIVE: LINE WILL BE REPLACED WITH NOP");
		this.put(101,"**SERIOUS** OPERAND FIELD CONTAINS INVALID CHARACTERS: LINE WILL BE REPLACED BY NOP");
		this.put(102,"**SERIOUS** A CALL TO RESET MUST HAVE BOTH A MEMORY PAGE AND LOCATION IN THE OPERAND: LINE WILL BE REPLACED BY A NOP");
		this.put(110,"**FATAL** THIS CALL TO STT DOES NOT HAVE THE REQUIRED LABEL FOR THE PROGRAM NAME: ASSEMBLY WILL BE STOPPED");
		this.put(111,"**SERIOUS** THIS CALL TO RESET DOES NOT HAVE THE REQUIRED LABEL WITH CORRECT LABEL SYNTAX: LINE WILL BE REPLACED WITH NOP");
		this.put(112,"**SERIOUS** THIS CALL TO EQU DOES NOT HAVE THE REQUIRED LABEL: LINE WILL BE REPLACED WITH NOP");
		this.put(113,"**SERIOUS** THE DECLARED CHARACTER CONSTANT IS EMPTY: LINE WILL BE REPLACED WITH NOP");
		this.put(114,"**SERIOUS** CHARACTER CONSTANTS DECLARED WITH CHC CAN ONLY BE 1-4 CHARACTERS LONG: LINE WILL BE REPLACED WITH NOP");
		this.put(115,"**SERIOUS** MEMORY REFERENCE IS OUT OF RANGE, MUST BE WITHIN RANGE 0-4095: LINE WILL BE REPLACED WITH NOP");
		this.put(116,"**SERIOUS** COMMAS ARE INVALID SEPARATORS FOR THIS DIRECTIVE: LINE WILL BE REPLACED WITH NOP");
		this.put(117,"**SERIOUS** CHARACTER CONSTANTS MUST BE SURROUNDED BY SINGLE QUOTES: LINE WILL BE REPLACED WITH NOP");
		this.put(118,"**SERIOUS** CHARACTER CONSTANTS CAN ONLY BE 1-4 CHARACTERS LONG: LINE WILL BE REPLACED WITH NOP");
		this.put(121,"**SERIOUS** THIS CALL TO RESET USES AN INVALID MEMORY PAGE NUMBER, LINE WILL BE IGNORED: LINE WILL BE REPLACED WITH NOP");
		this.put(122,"**SERIOUS** INVALID MEMORY PAGE NUMBER USED FOR PG1, MUST BE IN RANGE 0-3: LINE WILL BE REPLACED WITH NOP");
		this.put(123,"**SERIOUS** INVALID MEMORY PAGE NUMBER USED FOR PG2, MUST BE IN RANGE 0-3: LINE WILL BE REPLACED WITH NOP");
		this.put(131,"**FATAL** THIS CALL TO RESET USES A RESET LOCATION OUT OF BOUNDS: LINE WILL BE REPLACED WITH NOPLINE WILL BE IGNORED");
		this.put(140,"**SERIOUS** INVALID OPERAND SYNTAX, BOTH MEMORY PAGE AND LOCATION MUST BE IN OPERAND: LINE WILL BE REPLACED WITH NOP");
		this.put(141,"**SERIOUS** INCORRECT OPERAND FORMAT: LINE WILL BE REPLACED WITH NOP");
		this.put(150,"**SERIOUS** SYMBOL MUST BE PREVIOUSLY EQUATED BEFORE USED AS AN OPERAND: LINE WILL BE REPLACED WITH NOP");
		this.put(151,"**SERIOUS** A SYMBOL USED IN AN ADDRESS CONSTANT MUST BE PREVIOUSLY DEFINED: LINE WILL BE REPLACED WITH NOP");
		this.put(152,"**SERIOUS** SYMBOL DEFINED IN TABLE MUST REPRESENT A NUMERICAL VALUE TO BE USED AS AN OPERAND: LINE WILL BE REPLACED WITH NOP");
		this.put(160,"**WARNING** UNABLE TO ASSIGN LABEL TO THIS DIRECTIVE: LABEL IGNORED");
		this.put(161,"**SERIOUS** ONLY FOUR LABELS ARE ALLOWED TO BE DECLARED: LINE WILL BE REPLACED WITH NOP");
		this.put(162,"**FATAL** LABEL THAT FOLLOWS END MUST MATCH PRGM_NAME: ASSEMBLY WILL BE STOPPED");
		this.put(170,"**SERIOUS** SKIP STORAGE AMOUNT IS NOT WITHIN MEMORY LIMIT, MUST BE IN RANGE 0-4095: LINE WILL BE REPLACED WITH NOP");
		this.put(180,"**SERIOUS** NUMBER CONSTANT MUST BE A BASE 10 NUMBER IN RANGE -2*10^31 to 2*10^31-1: LINE WILL BE REPLACED WITH NOP");
		this.put(181,"**SERIOUS** A CALL TO NUM REQUIRES A NUMERICAL VALUE: LINE WILL BE REPLACED WITH NOP");
		this.put(190,"**SERIOUS**  * OPERATOR MUST BE FOLLOWED BY EITHER - OR +: LINE WILL BE REPLACED WITH NOP");
		this.put(200,"**SERIOUS** ADDRESS CONSTANT MUST BE BETWEEN 0 AND 4095: LINE WILL BE REPLACED WITH NOP");
		this.put(211,"**SERIOUS** THE NOP DIRECTIVE DOES NOT HAVE AN OPERAND FIELD: OPERAND FIELD IGNORED");
		this.put(220,"**WARNING** INVALID LABEL FORMAT, LEADING CHARACTER OF LABEL MUST BE A-Z OR a-z, LABEL IGNORED");
		this.put(221,"**WARNING** INVALID LABEL FORMAT, LABEL MUST ONLY CONTAIN UPPER AND LOWERCASE LETTERS AND NUMBERS, LABEL IGNORED");
		this.put(222,"**WARNING** INVALID LABEL FORMAT, LABEL MUST BE BETWEEN 1 AND 32 CHARACTERS, LABEL IGNORED");
		this.put(228,"**SERIOUS** LABEL MUST BE PREVIOUSLY EQUATED BEFORE USED IN A REGISTER FIELD: LINE WILL BE REPLACED WITH NOP");
		this.put(229,"**SERIOUS** INVALID ARITHMETIC REGISTER VALUE USED, MUST BE IN RANGE OF 0-7: LINE WILL BE REPLACED WITH NOP");
		this.put(230,"**SERIOUS** INVALID INDEX REGISTER VALUE USED, MUST BE IN RANGE OF 1-7: LINE WILL BE REPLACED WITH NOP");
		this.put(231,"**SERIOUS** INVALID MEMORY REFERENCE USED, MUST BE IN RANGE OF 0-4095: LINE WILL BE REPLACED WITH NOP");
		this.put(232,"**SERIOUS** SYMBOL REPRESENTS VALUE OUT OF RANGE FOR A MEMORY REFERENCE, MUST BE IN RANGE OF 0-4095: LINE WILL BE REPLACED WITH NOP");
		this.put(233,"**SERIOUS** INVALID L VALUE USED, MUST BE CONSTANT OR EQUATED SYMBOL IN RANGE OF 0-4095: LINE WILL BE REPLACED WITH NOP");
		this.put(235,"**SERIOUS** INVALID REGISTER USED FOR R1, MUST BE CONSTANT OR PREVIOUSLY EQUATED SYMBOL IN RANGE OF 0-7: LINE WILL BE REPLACED WITH NOP");
		this.put(236,"**SERIOUS** INVALID REGISTER USED FOR R2, MUST BE CONSTANT OR PREVIOUSLY EQUATED SYMBOL IN RANGE OF 0-7: LINE WILL BE REPLACED WITH NOP");
		this.put(237,"**SERIOUS** SYMBOL REPRESENTS AN INVALID INDEX REGISTER VALUE, EQUATED SYMBOL MUST REPRESENT A VALUE IN THE RANGE OF 1-7: LINE WILL BE REPLACED WITH NOP");
		this.put(238,"**SERIOUS** SYMBOL REPRESENTS AN INVALID ARITHMETIC REGISTER VALUE, EQUATED SYMBOL MUST REPRESENT A VALUE IN THE RANGE OF 0-7: LINE WILL BE REPLACED WITH NOP");
		this.put(240,"**SERIOUS** INSTRUCTIONS OF FORMAT 1 MUST CONTAIN EXACTLY TWO OPERANDS SEPARATED BY A COMMA: LINE WILL BE REPLACED WITH NOP");
		this.put(241,"**SERIOUS** INSTRUCTIONS OF FORMAT 2 MUST CONTAIN EXACTLY TWO OPERANDS SEPARATED BY A COMMA: LINE WILL BE REPLACED WITH NOP");
		this.put(242,"**SERIOUS** INSTRUCTIONS OF FORMAT 3 CONTAIN ONLY ONE OPERAND: LINE WILL BE REPLACED WITH NOP");
		this.put(243,"**SERIOUS** INSTRUCTIONS OF FORMAT 5 CONTAIN EXACTLY FOUR OPERANDS: LINE WILL BE REPLACED WITH NOP");
		this.put(244,"**SERIOUS** INSTRUCTIONS OF FORMAT 5 MUST CONTAIN FOUR OPERANDS SEPARATED BY COMMAS: LINE WILL BE REPLACED WITH NOP");
		this.put(245,"**SERIOUS** INSTRUCTIONS OF FORMAT 6 MUST CONTAIN EXACTLY TWO OPERANDS SEPARATED BY A COMMA: LINE WILL BE REPLACED WITH NOP");
		this.put(250,"**WARNING** INSTRUCTIONS CLRA AND CLRX USE NO OPERANDS: OPERAND FIELD WILL BE IGNORED");
		this.put(251,"**SERIOUS** INVALID OPERAND FOR THE INSTRUCTION DMP, MUST BE EITHER 1, 2 OR 3: LINE WILL BE REPLACED WITH NOP");
		this.put(260,"**SERIOUS** THE D OPERAND MUST BE EITHER A CONSTANT OR PREVIOUSLY EQUATED LABEL WITH VALUE 1 OR 2: LINE WILL BE REPLACED WITH NOP");
		this.put(261,"**SERIOUS** THE T OPERAND MUST BE EITHER A CONSTANT OR PREVIOUSLY EQUATED LABEL WITH VALUE 1 OR 2: LINE WILL BE REPLACED WITH NOP");
		this.put(262,"**SERIOUS** USE OF STAR NOTATION IS NOT ALLOWED FOR THE SWP INSTRUCTION: LINE WILL BE REPLACED WITH NOP");
		this.put(263,"**SERIOUS** INSTRUCTIONS OF FORMAT 3 ARE NOT ALLOWED TO USE STAR NOTATION: LINE WILL BE REPLACED WITH NOP");
		this.put(264,"**SERIOUS** NUMERICAL VALUE OR PREVIOUSLY EQUATED LABEL MUST FOLLOW A + OR - IN STAR NOTATION: LINE WILL BE REPLACED WITH NOP");
		this.put(265,"**SERIOUS** INVALID INDEX REGISTER VALUE USED, MUST BE IN RANGE OF 1-7: LINE WILL BE REPLACED WITH NOP");
		this.put(270,"**SERIOUS** LITERAL VALUE OUT OF RANGE, MUST BE WITHIN 0-4095: LINE WILL BE REPLACED WITH NOP");
		this.put(271,"**SERIOUS** LITERAL REPRESENTS AN INVALID ARITHMETIC REGISTER VALUE: LINE WILL BE REPLACED WITH NOP");
		this.put(272,"**SERIOUS** INVALID LITERAL SYNTAX: LINE WILL BE REPLACED WITH NOP");
		this.put(273,"**SERIOUS** INVALID BINARY NUMBER FORMAT USED AS A LITERAL: LINE WILL BE REPLACED WITH NOP");
		this.put(274,"**SERIOUS** INVALID HEXADECIMAL NUMBER FORMAT USED AS A LITERAL: LINE WILL BE REPLACED WITH NOP");
		this.put(275,"**SERIOUS** LITERALS CANNOT BE USED IN REGISTER FIELDS: LINE WILL BE REPLACED WITH NOP");
		this.put(276,"**SERIOUS** THE USE OF LITERALS IS NOT VALID IN EQUE EXPRESSIONS: LINE WILL BE REPLACED WITH NOP");
		this.put(277,"**SERIOUS** INVALID AMOUNT OF OPERATORS, ONLY A MAX OF 3 OPERATORS ARE ALLOWED FOR EQUE EXPRESSIONS: LINE WILL BE REPLACED WITH NOP");
		this.put(278,"**SERIOUS** THIS CALL TO EQUE DOES NOT HAVE A REQUIRED LABEL: LINE WILL BE REPLACED WITH NOP");
		this.put(279,"**SERIOUS** ONLY ONE STAR IS ALLOWED IN AN ADC-EXPRESSION: LINE WILL BE REPLACED WITH NOP");
		this.put(280,"**SERIOUS** STARS IN THE ADC-EXPRESSION MUST APPEAR FIRST IN THE EXPRESSION: LINE WILL BE REPLACED WITH NOP");
		this.put(281,"**SERIOUS** THIS CALL TO EQUE DOES NOT HAVE A REQUIRED LABEL: LINE WILL BE REPLACED WITH NOP");
		this.put(282,"**SERIOUS** THIS CALL TO AEXS DOES NOT HAVE A REQUIRED LABEL: LINE WILL BE REPLACED WITH NOP");
		this.put(283,"**SERIOUS** ONLY ONE STAR IS ALLOWED IN AN EQU-EXPRESSION: LINE WILL BE REPLACED WITH NOP");
		this.put(284,"**SERIOUS** STARS IN THE EQU-EXPRESSION MUST APPEAR FIRST IN THE EXPRESSION: LINE WILL BE REPLACED WITH NOP");
		this.put(285,"**SERIOUS** TOO MANY OPERATORS, EQU-EXPRESSIONS ALLOW FOR A MAXIMUM OF THREE OPERATORS: LINE WILL BE REPLACED WITH NOP");
		this.put(286,"**SERIOUS** INVALID CHARACTER VALUE, CHC CHARACTERS MUST BE ALL UPPER AND LOWER CASE LETTERS: LINE WILL BE REPLACED WITH NOP");
		this.put(287,"**WARNING** ANY LINES WRITTEN AFTER END ARE NOT PROCESSED: LINES WILL BE IGNORED");
		this.put(288,"**SERIOUS** THE LENGTH OF THE INCOMING INSTRUCTION LINE EXCEEDS THE MAXIMUM CHARACTER LIMIT: LINE WILL BE REPLACED WITH NOP");
		this.put(289,"**SERIOUS** ONLY ONE STAR IS ALLOWED IN AN INSTRUCTION OPERAND: LINE WILL BE REPLACED WITH NOP");
		this.put(290,"**SERIOUS** STAR NOTATION MUST BE THE FIRST CHARACTER OF AN INSTRUCTION OPERAND: LINE WILL BE REPLACED WITH NOP");
		this.put(291,"**SERIOUS** NO REQUIRED OPERANDS WERE FOUND IN THE OPERAND FIELD: LINE WILL BE REPLACED WITH NOP");
		this.put(292,"**SERIOUS** STAR NOTATION MEMORY REFERENCE OUT OF RANGE: LINE WILL BE REPLACED WITH NOP");
		this.put(293,"**SERIOUS** CANNOT EQUATE TO A LITERAL VALUE: LINE WILL BE REPLACED WITH NOP");
		this.put(294,"**SERIOUS** CANNOT EQUATE TO A SYMBOL VALUE: LINE WILL BE REPLACED WITH NOP");
		this.put(295,"**SERIOUS** CANNOT EQUATE TO A SYMBOL IN STAR NOTATION: LINE WILL BE REPLACED WITH NOP");
		this.put(296,"**SERIOUS** OPERANDS IN AN EQU-EXPRESSION CANNOT BE AN EXTERNAL REFERENCE: LINE WILL BE REPLACED WITH NOP");
		this.put(297,"**SERIOUS** SYMBOL MUST BE PREVIOUSLY EQUATED BEFORE BEING USED IN AN EQU-EXPRESSION: LINE WILL BE REPLACED WITH NOP");
		this.put(298,"**SERIOUS** LITERALS ARE AN INVALID OPERAND FOR AN EQU-EXPRESSION: LINE WILL BE REPLACED WITH NOP");
		this.put(299,"**SERIOUS** RESULT OF EXPRESSION IS NOT WITHIN MEMORY RANGE: LINE WILL BE REPLACED WITH NOP");
		this.put(300,"**SERIOUS** EXCEEDED THE MAXIMUM AMOUNT OF OPERATORS: LINE WILL BE REPLACED WITH NOP");
		this.put(301,"**SERIOUS** STAR MUST BE THE FIRST CHARACTER OF OPERAND AND MUST BE THE ONLY ONE IN OPERAND: LINE WILL BE REPLACED WITH NOP");
		this.put(302,"**SERIOUS** ONLY NUMERICAL VALUES ARE ALLOWED AS OPERANDS IN FORMAT 6 INSTRCUTIONS: LINE WILL BE REPLACED WITH NOP");
		this.put(303,"**SERIOUS** NUMBER STRING IS AN INVALID BINARY NUMBER: LINE WILL BE REPLACED WITH NOP");
		this.put(304,"**SERIOUS** SYMBOL MUST BE PREVIOUSLY EQUATED BEFORE USED AS A RESET OPERAND: LINE WILL BE REPLACED WITH NOP");
		this.put(305,"**SERIOUS** SYMBOL MUST BE PREVIOUSLY EQUATED BEFORE USED AS AN EQU OPERAND: LINE WILL BE REPLACED WITH NOP");
		this.put(306,"**SERIOUS** AN OPERATOR MUST FOLLOW * WHEN USED IN STAR NOTATION: LINE WILL BE REPLACED BY NOP");
		this.put(307,"**SERIOUS** ONLY ONE STAR IS ALLOWED IN STAR NOTATION: LINE WILL BE REPLACED BY NOP");
		this.put(308,"**SERIOUS** AN OPERATOR AND NUMBER OR PREVIOUSLY EQUATED LABEL MUST FOLLOW A *: LINE WILL BE REPLACED BY NOP");
		this.put(309,"**SERIOUS** LITERALS CANNOT BE USED IN COMBINATION WITH STAR NOTATION: LINE WILL BE REPLACED BY NOP");
		this.put(310,"**WARNING** SYMBOL HAS YET TO BE DEFINED: WILL BE CHECKED IN PASS 2");
		this.put(311,"**SERIOUS** BACK TO BACK OPERATORS ARE NOT ALLOWED IN AN OPERAND FIELD: LINE WILL BE REPLACE BY NOP");
		this.put(312,"**SERIOUS** SYMBOL MUST BE PREVIOUSLY EQUATED BEFORE BEING USED WITH STAR NOTATION: LINE WILL BE REPLACED BY NOP");
		this.put(313,"**SERIOUS** ALTERNATE EXECUTION STARTS USING STAR NOTATION MAY NOT USE EXPRESSIONS: LINE WILL BE REPLACED BY NOP");
		this.put(401,"**SERIOUS** ADDRESS CONSTANT OPERAND MUST BE A PREVIOUSLY EQUATED LABEL OR * NOTATION: LINE WILL BE REPLACED BY NOP");
		this.put(402,"**SERIOUS** INVALID EXPRESSION, BACK TO BACK OPERATORS ARE NOT ALLOWED: LINE WILL BE REPLACED BY NOP");
		this.put(403,"**SERIOUS** INVALID EXPRESSION, LAST VALUE OF EXPRESSION CANNOT BE AN OPERATOR: LINE WILL BE REPLACED BY NOP");
		this.put(404,"**SERIOUS** INVALID EXPRESSION, EXPRESSIONS CANNOT CONTAIN COMMAS: LINE WILL BE REPLACED BY NOP");
		this.put(500,"**SERIOUS** INSTRUCTION DOES NOT HAVE ANY REQUIRED OPERANDS, OPERAND FIELD IS EMPTY");
		this.put(501,"**SERIOUS** INVALID SHIFT VALUE, MUST BE IN RANGE OF 0-32: LINE WILL BE REPLACED BY NOP");
		this.put(502,"**SERIOUS** INVALID ROTATE VALUE, MUST BE IN RANGE OF 0-32: LINE WILL BE REPLACED BY NOP");
		this.put(503,"**SERIOUS** INVALID SHIFT VALUE, MUST BE A NUMERICAL VALUE: LINE WILL BE REPLACED BY NOP");
		this.put(504,"**SERIOUS** INVALID ROTATE VALUE, MUST BE A NUMERICAL VALUE: LINE WILL BE REPLACED BY NOP");
		this.put(505,"**SERIOUS** SHIFT VALUE OPERAND CANNOT USE A INDEXED MEMORY REFERENCE: LINE WILL BE REPLACED BY NOP");
		this.put(506,"**SERIOUS** INDEXED MEMORY REFERENCES MUST HAVE A VALUE WITHIN THE PARENTHESES: LINE WILL BE REPLACED BY NOP");
		this.put(507,"**SERIOUS** INDEXED MEMORY REFERENCES MUST HAVE AN OPENING PARENTHESES: LINE WILL BE REPLACED BY NOP");
		this.put(508,"**SERIOUS** THE PREVIOUSLY EQUATED LABEL REPRESENTS A SHIFT VALUE OUT OF RANGE 0-32: LINE WILL BE REPLACED BY NOP");
		this.put(509,"**SERIOUS** JUMP OPERATIONS CANNOT USE LITERALS AS OPERANDS: LINE WILL BE REPLACED BY NOP");
		this.put(510,"**SERIOUS** INVALID SQUARE VALUE, MUST BE IN RANGE OF 0-4095: LINE WILL BE REPLACED BY NOP");
		this.put(511,"**SERIOUS** STR OPERATION CANNOT USE LITERALS AS OPERANDS: LINE WILL BE REPLACED BY NOP");
		this.put(600,"**WARNING** BLANK LINE: LINE WILL BE IGNORED");
		this.put(601,"**FATAL** EXCEEDED THE ALLOWED NUMBER OF SYMBOLS: ASSEMBLY WILL BE STOPPED");
		this.put(602,"**WARNING** FULL LINE COMMENT MUST BEGIN IN COLUMN 1: LINE WILL BE IGNORED");
		this.put(603,"**FATAL** LOCATION COUNTER IS NOW GREATER THAN 4095: ASSEMBLY WILL BE STOPPED");
		this.put(604,"**FATAL** LOCATION COUNTER IS NOW NEGATIVE: ASSEMBLY WILL BE STOPPED");
		this.put(605,"**SERIOUS** MAXIMUM LINE LENGTH EXCEEDED: LINE WILL BE REPLACED BY NOP");
		this.put(606,"**SERIOUS** OPERAND CONTAINS TOO MANY COMMAS: LINE WILL BE REPLACED BY NOP");
		this.put(607,"**SERIOUS** SYMBOL MUST BE PREVIOUSLY EQUATED BEFORE USED AS AN OPERAND");
		this.put(608,"**SERIOUS** LITERALS ARE INVALID OPERANDS FOR THIS INSTRUCTION/DIRECTIVE: LINE WILL BE REPLACED BY NOP");
		this.put(609,"**SERIOUS** MEMORY REFERENCES IN FORMAT 2 CANNOT HAVE AN INDEX VALUE: LINE WILL BE REPLACED BY NOP");
		this.put(610,"**SERIOUS** INVALID MEMORY INDEX USED, MUST BE NUMERIC VALUE IN RANGE OF 1-7: LINE WILL BE REPLACED BY NOP");
		this.put(611,"**SERIOUS** MEMORY REFERENCES USING AN INDEX MUST END WITH A CLOSING PARENTHESES: LINE WILL BE REPLACED BY NOP");
		this.put(612,"**SERIOUS** EXPRESSION CONTAINS INVALID CHARACTERS : LINE WILL BE REPLACED BY NOP");
		this.put(613,"**SERIOUS** ADDRESS CONSTANTS CANNOT CONTAIN COMMAS");
		this.put(614,"**SERIOUS** ADDRESS CONSTANTS CANNOT USE LITERALS");
		this.put(615,"**SERIOUS** ADDRESS CONSTANTS CANNOT CONTAIN AN EXPRESSION: LINE WILL BE REPLACED BY NOP");
		this.put(616,"**SERIOUS** DIRECTIVES ARE NOT ALLOWED TO USE MEMORY REFERENCES WITH AN INDEX: LINE WILL BE REPLACED BY A NOP");
		this.put(617,"**SERIOUS** LITERALS CANNOT BE USED AS OPERANDS IN AN EXPRESSION");
		this.put(618,"**WARNING** LABEL USED FOR LINE THAT HAS NO INSTRUCTION OR OPERAND FIELD: LINE WILL BE SKIPPED");
		this.put(619,"**SERIOUS** A NUMBER MUST FOLLOW THE OPERATOR IN AN ADDRESS CONSTANT WITH STAR NOTATION: LINE WILL BE SKIPPED");
		this.put(620,"**SERIOUS** AN ADDRESS CONSTANT STARTING WITH + OR - MUST BE FOLLOWED BY A NUMERICAL VALUE: LINE WILL BE SKIPPED");
		this.put(621,"**SERIOUS** INVALID OPERAND FIELD, OPERAND CONTAINS INVALID CHARACTERS: LINE WILL BE REPALCED BY NOP");
		this.put(622,"**SERIOUS** THIS DIRECTIVE MAY NOT USE STAR NOTATION IN ITS OPERAND FIELD: LINE WILL BE REPLACED BY NOP");
		this.put(623,"**SERIOUS** ALTERNATE EXCUTION START CANNOT HAVE COMMAS IN THE OPERAND FIELD");
		this.put(624,"**SERIOUS** OPERAND FIELD MAY NOT HAVE COMMAS AS THE FIRST OR LAST CHARACTERS: LINE WILL BE REPLACED BY NOP");
		this.put(625,"**SERIOUS** USE OF AN EXPRESSION IS NOT ALLOWED AS AN OPERAND FOR THIS INSTRUCTION/DIRECTIVE: LINE WILL BE REPLACED BY NOP");
		this.put(626,"**SERIOUS** ONE OR MORE OPERANDS IN THIS EQU EXPRESSION ARE INVALID: LINE WILL BE REPLACED BY NOP");
		this.put(627,"**SERIOUS** LAST CHARACTER IN AN EXPRESSION CANNOT BE AN OPERATOR: LINE WILL BE REPLACED BY NOP");
		this.put(628,"**SERIOUS** STAR NOTATION CAN NOT BE USED AS A PAGE NUMBER OPERAND: LINE WILL BE REPLACED BY NOP");
		this.put(629,"**SERIOUS** SKIP STORAGE AMOUNT CANNOT BE NEGATIVE: LINE WILL BE REPLACED BY NOP");
		this.put(630,"**SERIOUS** STAR NOTATION CANNOT BE USED IN A REGISTER FIELDS: LINE WILL BE REPLACED BY A NOP");
		this.put(631,"**SERIOUS** EXPRESSIONS CANNOT BE USED IN REGISTER FIELDS: LINE WILL BE REPLACED BY A NOP");
		this.put(632,"**SERIOUS** SYMBOLS USED AS AN INDEX OPERAND FOR A MEMORY REFERENCE MUST BE PREVIOUSLY EQUATED");
		this.put(633,"**SERIOUS** LITERALS CANNOT BE USED IN THE INDEX FIELD OF A MEMORY REFERENCE: LINE WILL BE REPLACED BY A NOP");
		this.put(634,"**SERIOUS** STAR NOTATION CANNOT BE USED IN THE INDEX FIELD OF A MEMORY REFERENCE: LINE WILL BE REPLACED BY A NOP");
		this.put(635,"**SERIOUS** EXPRESSIONS CANNOT BE USED IN THE INDEX FIELD OF A MEMORY REFERENCE: LINE WILL BE REPLACED BY A NOP");
		this.put(636,"**SERIOUS** LITERALS CANNOT BE USED AN INDEX MEMORY REFERENCE LOCATION: LINE WILL BE REPLACED BY A NOP");
		this.put(637,"**SERIOUS** MEMORY REFERENCES CANNOT BEGIN OR END WITH AN OPERATOR: LINE WILL BE REPLACED BY A NOP");
		this.put(638,"**SERIOUS** FORMAT 3 OPERANDS CANNOT USE INDEXED MEMORY REFERENCES: LINE WILL BE REPLACED BY NOP");
		this.put(639,"**SERIOUS** FORMAT 3 OPERANDS CANNOT USE LITERALS: LINE WILL BE REPLACED BY NOP");
		this.put(640,"**SERIOUS** FORMAT 3 OPERANDS CANNOT USE STAR NOTATION MEMORY REFERENCES: LINE WILL BE REPLACED BY NOP");
		this.put(641,"**SERIOUS** HLT DOES NOT ALLOW THE USE OF EXTERNAL SYMBOLS: LINE WILL BE REPLACED BY NOP");
		this.put(642,"**SERIOUS** FORMAT 7 OPERANDS CANNOT USE INDEXED MEMORY REFERENCES: LINE WILL BE REPLACED BY NOP");
		this.put(643,"**SERIOUS** FORMAT 7 OPERANDS CANNOT USE LITERALS: LINE WILL BE REPLACED BY NOP");
		this.put(644,"**SERIOUS** FORMAT 7 OPERANDS CANNOT USE STAR NOTATION MEMORY REFERENCES: LINE WILL BE REPLACED BY NOP");
		this.put(645,"**SERIOUS** FORMAT 6 OPERANDS CANNOT USE INDEXED MEMORY REFERENCES: LINE WILL BE REPLACED BY NOP");
		this.put(646,"**SERIOUS** OPERAND FOR DMP OPERATIONS MUST BE A CONSTANT OR EQUATED LABEL WITH VALUE OF EITHER 1, 2 or 3: LINE WILL BE REPLACED BY NOP");
		this.put(647,"**SERIOUS** FORMAT 3 OPERANDS CANNOT USE EXPRESSIONS AS OPERANDS: LINE WILL BE REPLACED BY NOP");
		this.put(648,"**SERIOUS** FORMAT 2 INSTRUCTIONS USING STAR AND AN OPERATOR MUST BE FOLLOWED BY A CONSTANT OR EQUATED LABEL: LINE WILL BE REPLACED BY NOP");
		this.put(649,"**SERIOUS** FORMAT 2 INSTRUCTIONS CANNOT USE LITERALS: LINE WILL BE REPLACED BY NOP");
		this.put(650,"**SERIOUS** DMP VALUE OPERAND MUST EITHER BE A CONSTANT OR AN EQUATED SYMBOL: LINE WILL BE REPLACED BY NOP");
		this.put(651,"**SERIOUS** FORMAT 5 INSTRUCTION MEMORY REFERENCE IS INVALID, MUST BE IN RANGE 0-4095: LINE WILL BE REPLACED BY NOP");
		this.put(652,"**SERIOUS** THE RDV INSTRUCTION CANNOT USE LITERALS AS THE MEMORY REFERNCE: LINE WILL BE REPLACED BY A NOP");
		this.put(653,"**SERIOUS** FORMAT 6 INSTRUCTIONS CANNOT USE LITERALS: LINE WILL BE REPLACED BY A NOP");
		this.put(654,"**SERIOUS** FORMAT 6 INSTRUCTIONS CANNOT USE STAR NOTATION: LINE WILL BE REPLACED BY A NOP");
		this.put(655,"**SERIOUS** FORMAT 7 INSTRUCTIONS CANNOT USE LITERALS: LINE WILL BE REPLACED BY A NOP");
		this.put(656,"**SERIOUS** FORMAT 7 INSTRUCTIONS CANNOT USE STAR NOTATION: LINE WILL BE REPLACED BY A NOP");
		this.put(657,"**SERIOUS** STAR NOTATION OPERATORS MUST BE FOLLOWED BY A NUMERICAL VALUE IN INSTRUCTION OPERAND FIELDS: LINE WILL BE REPLACED BY NOP");
		this.put(658,"**SERIOUS** THE RESULT OF STAR NOTATION EXPRESSION IS OUT OF RANGE 0-4095: LINE WILL BE REPLACED BY NOP");
		this.put(659,"**SERIOUS** FORMAT 5 D OPERAND MAY NOT USE STAR NOTATION: LINE WILL BE REPLACED BY NOP");
		this.put(660,"**SERIOUS** FORMAT 5 T OPERAND MAY NOT USE STAR NOTATION: LINE WILL BE REPLACED BY NOP");
		this.put(661,"**SERIOUS** FORMAT 5 L OPERAND MAY NOT USE STAR NOTATION: LINE WILL BE REPLACED BY NOP");
		this.put(662,"**SERIOUS** FORMAT 5 D OPERAND MAY NOT USE INDEXED MEMORY REFERENCES: LINE WILL BE REPLACED BY NOP");
		this.put(663,"**SERIOUS** FORMAT 5 T OPERAND MAY NOT USE INDEXED MEMORY REFERENCES: LINE WILL BE REPLACED BY NOP");
		this.put(664,"**SERIOUS** FORMAT 5 L OPERAND MAY NOT USE INDEXED MEMORY REFERENCES: LINE WILL BE REPLACED BY NOP");
		this.put(665,"**SERIOUS** FORMAT 6 INSTRUCTION OPERANDS MAY NOT USE EXPRESSIONS: LINE WILL BE REPLACED BY NOP");
		this.put(666,"**SERIOUS** FORMAT 7 INSTRUCTIONS MUST HAVE EXACTLY 2 OPERANDS SEPARATED BY A COMMA: LINE WILL BE REPLACED BY NOP");
		this.put(667,"**SERIOUS** ADCE EXPRESSIONS MAY HAVE 3 OPERATORS AT MOST: LINE WILL BE REPLACED BY NOP");
		this.put(668,"**SERIOUS** CHC DIRECTIVE CANNOT USE STAR NOTATION: LINE WILL BE REPLACED BY NOP");
		this.put(669,"**SERIOUS** CHC CANNOT USE INDEXED MEMORY REFERENCES: LINE WILL BE REPLACED BY NOP");
		this.put(670,"**SERIOUS** CHC CANNOT USE EXPRESSIONS: LINE WILL BE REPLACED BY NOP");
		this.put(671,"**SERIOUS** CHC MEMORY REFERENCE CANNOT USE LITERALS: LINE WILL BE REPLACED BY NOP");
		this.put(672,"**SERIOUS** CHC OPERAND FIELD CANNOT HAVE STAR AS FIRST CHARACTER: LINE WILL BE REPLACED BY NOP");
		this.put(673,"**FATAL** END DIRECTIVE DOES NOT HAVE OPERAND FIELD: ASSEMBLY WILL BE STOPPED");
		this.put(674,"**FATAL** PROGRAM MUST CONTAIN A VALID END DIRECTIVE: ASSEMBLY WILL BE STOPPED");
		this.put(675,"**WARNING** SYMBOL IS ALREADY DEFINED: LABEL WILL BE IGNORED");
		this.put(676,"**FATAL** STT DIRECTIVE HAS INVALID OPERAND FIELD: ASSEMBLY WILL BE STOPPED");
		this.put(677,"**SERIOUS** ADDRESS CONSTANT IS INVALID, SYMBOL IN THE OPERAND FIELD IS NEVER DEFINED: LINE WILL BE REPLACED BY A NOP");
		this.put(678,"**SERIOUS** ONE OR MORE OF THE ADDRESS EXPRESSION OPERANDS ARE INVALID: LINE WILL BE REPLACED BY NOP");
		this.put(679,"**SERIOUS** RESULT OF ADDRESS CONSTANT EXPRESSION IS OUT OF BOUNDS: LINE WILL BE REPLACED BY NOP");
		this.put(680,"**SERIOUS** SYMBOL USED IN THE OPERAND FIELD HAS INVALID SYNTAX: LINE WILL BE REPLACED BY NOP");
		this.put(681,"**SERIOUS** ADDRESS CONSTANTS CANNOT USE EXTERNAL REFERENCES: LINE WILL BE REPLACED BY NOP");
		this.put(682,"**SERIOUS** SYMBOL IN THE OPERAND FIELD WAS NEVER DEFINED IN THE PROGRAM: LINE WILL BE REPLACED BY NOP");
		this.put(683,"**SERIOUS** EQUATED LABELS CANNOT BE USED BEFORE THEY ARE DECLARED: LINE WILL BE REPLACED BY NOP");
		this.put(684,"**FATAL** ONLY ONE STT DIRECTIVE IS ALLOWED TO BE USED PER PROGRAM: ASSEMBLY WILL BE STOPPED");
		this.put(685,"**FATAL** ONLY ONE HLT OPERATION IS ALLOWED TO BE USED PER PROGRAM: ASSEMBLY WILL BE STOPPED");
	}

	public ArrayList<Integer> getUsedErrors(){
		return usedErrors;
	}
	
	public int getErrorCount(){
		return errorcount;
	}
	
	public void clearUsedErrors(){
		usedErrors.clear();
	}
	
	public void clearAllErrors(){
		usedErrors.clear();
		errorcount = 0;
	}
}
